home *** CD-ROM | disk | FTP | other *** search
/ Fritz: All Fritz / All Fritz.zip / All Fritz / FILES / PROGSCAL / TBUTIL2.LZH / HEXDUMP.PAS < prev    next >
Pascal/Delphi Source File  |  1984-07-17  |  2KB  |  123 lines

  1. PROGRAM hexdump;
  2.  
  3. {  This program will dump in hex and ascii form a file that the user    }
  4. {  specifies.  Written for Turbo Pascal by Jeff Firestone.  June 1984.  }
  5. {  Modified by: Malcolm McCorquodale. July 1984. Pauses after every 128 }
  6. {  bytes are printed. }
  7.  
  8. CONST
  9.   ArrSize = 128;
  10. VAR
  11.   argc, i, numin, tot, cfrom: INTEGER;
  12.   f : FILE;
  13.   Buffer : ARRAY [0..ArrSize] OF CHAR;
  14.  
  15.  
  16. PROCEDURE ohib(nib:CHAR);
  17. BEGIN
  18.   i:= ORD(nib);
  19.   i:= i AND 15;
  20.   IF (i >= 10) THEN
  21.     WRITE(CHR(i - 10 + ORD('A')))
  22.   ELSE
  23.     WRITE(i);
  24. END;
  25.  
  26. PROCEDURE ohb(byt:CHAR);
  27. VAR
  28.   TmpByt : CHAR;
  29. BEGIN
  30.   TmpByt:= CHR(ORD(byt) SHR 4);
  31.   ohib(TmpByt);
  32.   ohib(byt);
  33. END;
  34.  
  35. PROCEDURE ohw(wrd:INTEGER);
  36. VAR
  37.   TmpByt : CHAR;
  38. BEGIN
  39.   TmpByt:= CHR(HI(wrd));
  40.   ohb(TmpByt);
  41.   TmpByt:= CHR(LO(wrd));
  42.   ohb(TmpByt);
  43. END;
  44.  
  45.  
  46. PROCEDURE OpenFile;
  47. VAR Name : STRING[20];
  48. BEGIN
  49.   FILLCHAR(Buffer, SIZEOF(Buffer), 0);
  50.   WRITE('What file would you like to dump in hex form : ');
  51.   READLN(Name);
  52.   ASSIGN(f, Name);
  53.   RESET(f);
  54. END;
  55.  
  56.  
  57. PROCEDURE DoHexDump;
  58. VAR                    {mm}
  59.    CH : CHAR;          {mm}
  60.  
  61. BEGIN
  62.   tot:= 0;
  63.   REPEAT
  64. {  Read in a block of characters from the file  }
  65.  
  66.     BLOCKREAD(f, Buffer, 1);
  67.     cfrom:= 0;
  68.     WHILE cfrom < ArrSize-1 DO
  69.     BEGIN
  70.  
  71. {  Print the offset in HEX  }
  72.  
  73.       ohw(tot);
  74.       WRITE(' :');
  75.  
  76. {  Print the bytes in HEX  }
  77.  
  78.       FOR i:= 0 TO 7 DO
  79.       BEGIN
  80.         WRITE(' ');
  81.         ohb(buffer[cfrom]);
  82.         cfrom:= cfrom + 1;
  83.       END;
  84.  
  85.       WRITE(' ');
  86.  
  87.       FOR i:= 8 TO 15 DO
  88.       BEGIN
  89.         WRITE(' ');
  90.         ohb(buffer[cfrom]);
  91.         cfrom:= cfrom + 1;
  92.       END;
  93.  
  94.       cfrom:= cfrom - 16;
  95.       WRITE('  '+CHR(186)+' ');
  96.  
  97. {  Print the bytes in ASCII  }
  98.  
  99.       FOR i:= 0 TO 15 DO
  100.       BEGIN
  101.         IF ((Buffer[cfrom] < ' ') OR (ORD(Buffer[cfrom]) >= $7F)) THEN
  102.           Buffer[cfrom]:= '.';
  103.         WRITE(Buffer[cfrom]);
  104.         cfrom:= cfrom + 1;
  105.       END;
  106.       WRITELN(' '+CHR(186));
  107.       tot:= tot + 16;
  108.       IF (tot MOD 384) = 0 THEN {mm}
  109.       BEGIN                     {mm}
  110.            READLN(CH);          {mm}
  111.            CLRSCR;              {mm}
  112.       END;                      {mm}
  113.     END;   {  While  }
  114.   UNTIL EOF(f);
  115.   CLOSE(f);
  116. END;
  117.  
  118.  
  119. BEGIN
  120.   OpenFile;
  121.   DoHexDump;
  122. END.
  123.